﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SG.Domain;

namespace SG.Logic
{
    public class ExpProveedor:ContextManager
    {
       #region Constructor
        public ExpProveedor():base() { 
        
        }
        public ExpProveedor(SGEntities cont)
            : base(cont)
        { 
        
        }

        #endregion 
        public IList<Proveedor> GetAllProveedor() {
            return Context.Proveedor.ToList();
        }
      
        public void SaveOrUpdateProveedor(Proveedor entity) {
            Proveedor entityToSave = new Proveedor();
            if (entity.Id > 0)// si es una actualizacion
            {
                entityToSave = Context.Proveedor.Where(f => f.Id == entity.Id).First();
            }
            else
            {//si es una creación
              
                Context.AddToProveedor(entityToSave);
            }

            entityToSave.Nombre = entity.Nombre;
            
            entityToSave.Domicilio = entity.Domicilio;
            entityToSave.Telefono = entity.Telefono;
            entityToSave.CUIT = entity.CUIT;
            entityToSave.TiempoR = entity.TiempoR;
            entityToSave.FechaUltimaVisita = DateTime.Now;
            foreach (ArticuloProveedor item in entityToSave.ArticuloProveedor.ToArray())
            {
                
                Context.DeleteObject(item);
                
            }

            foreach (ArticuloProveedor item in entity.ArticuloProveedor.ToArray())
            {
                Articulo articulo = Context.Articulo.Where(f => f.Id == item.IdArticulo).First();
                articulo.Estado = "Asignado";

                ArticuloProveedor ap = new ArticuloProveedor();
                ap.CantidadMinDescuento = item.CantidadMinDescuento;
                ap.CostoAdquisicion = item.CostoAdquisicion;
                ap.CostoEmision = item.CostoEmision;
                ap.Descuento = item.Descuento;
                ap.IdArticulo = item.IdArticulo;
                ap.TiempoEspera = item.TiempoEspera;
                entityToSave.ArticuloProveedor.Add(ap);
                //ExpArticulo exp = new ExpArticulo();
                //exp.SaveOrUpdateArticulo(articulo);
                //ExpPolitica expP = new ExpPolitica();
                //expP.CalcularPolitica(articulo);
            }


            Context.SaveChanges();
        }
        public Proveedor GetProveedor(int id) {
            return Context.Proveedor.Where(f => f.Id == id).FirstOrDefault();
        }
        public void DeleteProveedor(int id) {
            Proveedor entity = Context.Proveedor.Where(f => f.Id == id).First();
            
            foreach (var item in entity.ArticuloProveedor.ToArray())
            {
                Context.DeleteObject(item);
            }

            Context.DeleteObject(entity);
            Context.SaveChanges();
        
        }
        public List<ArticuloProveedor> GetAllArticuloProveedor(int idProveedor)
        {

            return Context.ArticuloProveedor.Where(f => f.IdProveedor == idProveedor).ToList();
        }
    }
}
